package com.echo.handler;

import com.echo.exception.BaseException;

import com.echo.result.ResultVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.HttpRequestMethodNotSupportedException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

/**
 * 全局异常处理器，处理项目中抛出的业务异常
 * 捕捉并抛出异常便于前后端【自定义异常】
 */
@RestControllerAdvice
@Slf4j
public class GlobalExceptionHandler {

    /**
     * 捕获业务异常：这里的作用就是去捕获异常的信息并抛出
     * @param ex
     * @return
     */
    @ExceptionHandler
    public ResultVO exceptionHandler(BaseException ex){


        log.error("异常信息：{}", ex.getMessage());
        return  new ResultVO<>(0,ex.getMessage(),null);
    }
    @ExceptionHandler(HttpRequestMethodNotSupportedException.class)
    public ResponseEntity<String> handleHttpRequestMethodNotSupported(HttpRequestMethodNotSupportedException ex) {
        return ResponseEntity
                .status(HttpStatus.METHOD_NOT_ALLOWED)
                .body("Method not allowed: " + ex.getMethod());
    }
        @ExceptionHandler(Exception.class)
        public ResultVO handleException(Exception e) {
            // 可以根据不同的异常类型返回不同的状态码和消息
            return new ResultVO(0,e.getMessage(),null);
        }
// 现在这里不用了，在注册那里自己会抛异常
//    /**
//     * 处理SQL异常
//     * @param ex
//     * @return
//     */
//    @ExceptionHandler
//    public ResultVO exceptionHandler(SQLIntegrityConstraintViolationException ex){
//        //这里是处理主键异常的，即在新增操作时，如果主键冲突【如用户名唯一但又插入了一条同名用户，则会报错】
//        String message = ex.getMessage();
//        ResultVO<> resultVO;
//        //根据报错信息去截取：这里可以得到更为准确的用户id
//        if(message.contains("Duplicate entry")){
//
//            String[] split = message.split(" ");
//            String username = split[2];
//            String msg = username + MessageConstant.ALREADY_EXISTS;
//            return ResultVO;
//        }else{
//            return Result.error(MessageConstant.UNKNOWN_ERROR);
//        }
//    }
}
